package com.ruoyi.merchant.service.impl;

import com.github.pagehelper.Page;
import com.ruoyi.merchant.domain.ReportPolice;
import com.ruoyi.merchant.dto.ReportPoliceDto;
import com.ruoyi.merchant.service.AlaramService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;

import java.util.ArrayList;
import java.util.List;

@Slf4j
@Service
public class AlaramServiceImpl implements AlaramService {


    @Autowired
    private MongoTemplate mongoTemplate;

    /**
     * 查询紧急报警
     *
     * @param reportPoliceDto
     * @return
     */
    @Override
    public Page<ReportPolice> listAlaram(ReportPoliceDto reportPoliceDto) {
        Assert.notNull(reportPoliceDto, "reportPoliceDto to save must not be null!");
        Page page =  reportPoliceDto.getPage();
        Query condition= new Query();

//        //客户姓名
//        if(reportPoliceDto.getCustomerName()!=null) {
//            String regex = String.format("%s%s%s", "^.*", reportPoliceDto.getCustomerName(), ".*$");
//            Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
//            condition.addCriteria(Criteria.where("customerName").regex(pattern));
//        }
//        //客户编号
//        if(reportPoliceDto.getCustomerNum()!=null) {
//            String regex = String.format("%s%s%s", "^.*", reportPoliceDto.getCustomerNum(), ".*$");
//            Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
//            condition.addCriteria(Criteria.where("customerNum").regex(pattern));
//        }
//
//        //身份证号
//        if(reportPoliceDto.getIdCard()!=null) {
//            String regex = String.format("%s%s%s", "^.*", reportPoliceDto.getIdCard(), ".*$");
//            Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
//            condition.addCriteria(Criteria.where("idCard").regex(pattern));
//        }
//
//        // 年龄
//        if(reportPoliceDto.getStartAge() > 0  && reportPoliceDto.getEndAge() > 0){
//            // 添加大于开始年龄小于结束年龄的条件
//            Criteria between = Criteria.where("age").gte(reportPoliceDto.getStartAge()).lte(reportPoliceDto.getEndAge());
//            condition.addCriteria(between);
//        }else{
//            // 其中一个为空 分别进行判断
//            if(reportPoliceDto.getStartAge() > 0){
//                Criteria gte = Criteria.where("age").gte(reportPoliceDto.getStartAge());
//                condition.addCriteria(gte);
//            }
//            if(reportPoliceDto.getEndAge() > 0){
//                Criteria lte = Criteria.where("age").lte(reportPoliceDto.getEndAge());
//                condition.addCriteria(lte);
//            }
//        }
//        //性别
//        if(org.apache.commons.lang3.StringUtils.isNotBlank(reportPoliceDto.getSex())){
//            condition.addCriteria(Criteria.where("sex").is(reportPoliceDto.getSex()));
//        }
//        //所属机构
//        if(!StringUtils.isEmpty(reportPoliceDto.getOrgName())){
//            String regex = String.format("%s%s%s", "^.*", reportPoliceDto.getOrgName(), ".*$");
//            Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
//            condition.addCriteria(Criteria.where("orgName").regex(pattern));
//        }
//
//        // 风险程度
//        if(!StringUtils.isEmpty(reportPoliceDto.getRiskStartLevel())  && !StringUtils.isEmpty(reportPoliceDto.getRiskEndLevel())){
//            // 添加大于开始年龄小于结束年龄的条件
//            Criteria between = Criteria.where("riskLevel").gte(reportPoliceDto.getRiskStartLevel()).lte(reportPoliceDto.getRiskEndLevel());
//            condition.addCriteria(between);
//        }else{
//            // 其中一个为空 分别进行判断
//            if(!StringUtils.isEmpty(reportPoliceDto.getRiskStartLevel()) ){
//                Criteria gte = Criteria.where("riskLevel").gte(reportPoliceDto.getRiskStartLevel());
//                condition.addCriteria(gte);
//            }
//            if( !StringUtils.isEmpty(reportPoliceDto.getRiskEndLevel())){
//                Criteria lte = Criteria.where("riskLevel").lte(reportPoliceDto.getRiskEndLevel());
//                condition.addCriteria(lte);
//            }
//        }
//
//        //报警方式
//        if(reportPoliceDto.getMode() > 0  ){
//            condition.addCriteria(Criteria.where("mode").is(reportPoliceDto.getMode()));
//        }
//        // 报警时间
//        if(reportPoliceDto.getReportStartTime() !=null && reportPoliceDto.getReportEndTime() !=null){
//            Criteria between = Criteria.where("reportTime").gte(reportPoliceDto.getReportStartTime()).lte(reportPoliceDto.getReportEndTime());
//            condition.addCriteria(between);
//        }else{
//            // 其中一个为空 分别进行判断
//            if(reportPoliceDto.getReportStartTime() != null){
//                Criteria gte = Criteria.where("reportTime").gte(reportPoliceDto.getReportStartTime());
//                condition.addCriteria(gte);
//            }
//            if(reportPoliceDto.getReportEndTime() != null){
//                Criteria lte = Criteria.where("reportTime").lte(reportPoliceDto.getReportEndTime());
//                condition.addCriteria(lte);
//            }
//        }
//        //处理结果
//        if(reportPoliceDto.getHandlerResult()!=null ){
//            condition.addCriteria(Criteria.where("handlerResult").is(reportPoliceDto.getHandlerResult()));
//        }
        if(StringUtils.isEmpty(reportPoliceDto.getCustomerId())){
            condition.addCriteria(Criteria.where("appUserId").is(reportPoliceDto.getAppUserId()));
        }

        List<Sort.Order> obj = new ArrayList<>();
        Sort.Order handlerResult = new Sort.Order(Sort.Direction.ASC , "handlerResult");
        Sort.Order reportTime = new Sort.Order(Sort.Direction.DESC , "reportTime");
        obj.add(handlerResult);
        obj.add(reportTime);
        condition.with(Sort.by(obj));
        int totalCount = (int) mongoTemplate.count(condition, ReportPolice.class);
        int offset = (int)page.getPageNum();
        int size = (int) page.getPageSize();
        List<ReportPolice> reportPoliceList = mongoTemplate.find(condition.skip(offset).limit(size), ReportPolice.class);
        page.addAll(reportPoliceList);
        page.setTotal(totalCount);
        return page;
    }

    /**
     * 更新处理结果
     *
     * @param reportPoliceDto
     * @return
     */
    @Override
    public Boolean modfiyReportPolice(ReportPoliceDto reportPoliceDto) {
        return null;
    }
}
